package cn.itcast.nems.order.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Data
public class PaymentFlowDTO implements Serializable {
    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 721159299424912688L;
    /**
     * 订单ID
     */
    private String orderId ;

    /**
     * 凭单类型：在线支付|ONLINE_PAY、离线支付|OFFLINE_PAY、退款|REFUND
     */
    private String journalType;

    /**
     * 凭单号：根据凭单类型不同。如果是在线支付则为支付平台内的支付子单号。如果是离线支付则为离线支付单行ID，如果是退费则为退费单号。
     */
    private String journalNo;

    /**
     * 本次发生金额：支付为正，退费为负。单位：分
     */
    private Integer amount;

    /**
     * 手续费：amount*charge_rata/100。单位：分。注：目前只有支付会存在费用。
     */
    private Integer charge;

    /**
     * 手续费费率。和渠道方确定。
     */
    private BigDecimal chargeRate;

    /**
     * 业务发生时间：根据凭单的不同，分别记录在线支付时间、离线支付时间、退费时间。
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    private LocalDateTime bizDate;

    /**
     * 支付方式编号：在线支付填写支付平台对应支付方式编号，离线支付填写离线支付对应凭单上的支付方式编号，退费则填写退费方式编号
     */
    private String paymentMethodCode;

    /**
     * 支付方式名称：在线支付填写支付平台对应支付方式名称，离线支付填写离线支付对应凭单上的支付方式名称，退费则填写退费方式名称
     */
    private String paymentMethodName;

    /**
     * 支付渠道帐号编号：同一个支付方式可能会对应多个支付渠道。比如支付宝、微信可能会有多个渠道账号，银行也会有多个帐号。此处保存比支付方式更细粒度的具体帐号。
     */
    private String paymentAccountCode;

    /**
     * 支付渠道帐号名称
     */
    private String paymentAccountName;

    /**
     * 备注
     */
    private String remark;

    private StudentRecordFundFlowDTO studentRecordFundFlowDTO;
}
